package com.haojin.java;

/**
 * @author .29.
 * @create 2022-03-30 19:14
 */

/*
使用 同步方法  处理继承Thread类的方式中的线程安全问题

  关于同步方法的总结：
    1.同步方法仍然涉及到同步监视器，只是不需要我们显式的声明
    2.非静态的同步方法，同步监视器为：this
    3.静态的  同步方法，同步监视器为：当前类本身（这里是:Window4.class）
 */

class Window4 extends Thread {
    private static int ticket = 100;


    @Override
    public void run() {
        while (true) {
               show();
        }
    }
    public static synchronized void show(){//同步监视器：Window4.class
        if (ticket > 0) {
            System.out.println(Thread.currentThread().getName() + "卖票，票号为：" + ticket);
            ticket--;
        }
    }
}

public class WindowTest4 {
    public static void main(String[] args) {
        Window4 a = new Window4();
        Window4 s = new Window4();
        Window4 d = new Window4();

        a.setName("窗口1");
        s.setName("窗口3");
        d.setName("窗口2");

        a.start();
        s.start();
        d.start();
    }
}